//
//  dataType-OC.m
//  Study-code
//
//  Created by quanhao huang on 2021/11/12.
//

#import "dataType-OC.h"

//我们在这里创建.m的interface,用end结尾
@interface dataType_OC ()
//两种定义方法，一种写在{}里，只是告诉这个类有这个值，另一种写在外边这样就是持久化的一个值，两种写法都是只能值只能定义，不能赋值,赋值需要我们到实现里边找时机去做
{
    int a;
    float b;
    NSArray *arr;
    NSDictionary *dic;
}
@property(nonatomic, assign) int c;
@property(nonatomic, strong) NSMutableArray *arr2;//new了一个可变数组
@property(nonatomic, strong) NSMutableDictionary *dic2;//new了一个可变字典
@end

@implementation dataType_OC

//方法我们写在实现里边，也就是implementation
//我们来为定义的变量赋值
- (void)assignment {
    a = 5;
    b = 5.0;
    self.c = 6.0;//为什么需要self呢，因为@property定义它是属于这个类的，self代表自己，在这个类里的self就是dataType_OC
    //另一种写法
    _c = 6.0;//_可以代替self.
    
    arr = @[@"1", @"2"];
    dic = @{@"fruit": @"apple", @"animal": @"monkey"};
}

//接下来我们来操作这几个数据
//转化
- (void)modifiedDataType {
    a = (int)a;
    b = (float)b;
    
    //可变数组操作
    //添加元素
    [_arr2 addObject:@"3"];
    //删除元素
    [_arr2 removeObjectAtIndex:1];
    //删除所有元素
    [_arr2 removeAllObjects];
    
    //可变字典操作
    //添加元素
    [_dic2 setValue:@"fruit" forKey:@"apple"];
    [_dic2 setValue:@"animal" forKey:@"monkey"];
    //判断是否有这个key
    BOOL flag = [[_dic2 allKeys] containsObject:@"fruit"];
    if (flag) {
        //有这个key
        NSLog(@"有水果这个key");
    }else {
        //没有这个key
        NSLog(@"没有水果这个key");
    }
    //高级写法
    flag ? NSLog(@"有水果这个key") : NSLog(@"没有水果这个key");
    //根据key来删除元素，
    [_dic2 removeObjectForKey:@"fruit"];
    //根据很多key来删除元素
    [_dic2 removeObjectsForKeys:@[@"fruit", @"animal"]];
    //删除所有元素
    [_dic2 removeAllObjects];
}
//带返回值的写法,我们做了一个加法方法，oc支持隐式转化，所以我们可以不用那么精细的去做结果
- (int)modifiedDataType2 {
    return a + b;
}
//带传参的方法写法，我们做一个方法，能让你传入2个数字来做相加，这个就是一个简单的计算器方法了,不同的参数用:隔开
- (int)modifiedDataType3:(int)value value2:(int)value2 {
    return value + value2;
}//如果这个方法我们想要别的类也使用呢？，那就把这个方法定义到.h的interface去（返回.h查看如何定义,返回swift看看swift也用了这个方法），如何使用这个方法呢？
//使用方法
- (void)useMethod {
    //打开注释看看d的值为多少
//    int d = [self modifiedDataType3:2 value2:3];
}

//枚举
typedef enum  {
    email,
    phone,
    accout,
}LoginTypes;

@end
